package co.gov.medellin.ssti.sub.paoyer.administration.dao;

import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.FDClassVO;

/**
 * DAO para realizar las consultas de las clases de fondos documentales.
 * 
 * @author Rene.Rangel@consult-soft.com
 * @version 1.0
 */

public class FDClassDAO {
	/**
	 * Conexion a la base de datos.
	 */
	private Connection conn = null;

	/**
	 * Constructor que recibe como parametro la conexion con la base de datos.
	 * 
	 * @param conn
	 *            Conexion con la base de datos.
	 */

	public FDClassDAO(Connection conn) {
		this.conn = conn;
	}

	public Collection<FDClassVO> findFDClassByCriterea(FDClassVO criterea)
			throws SQLException {

		String query = "SELECT clfd.* FROM tge_clase_fondo_documental clfd";

		String filters = "";
		// Filtro por codigo interno de clase de fondo documental
		if ((criterea.getCode() != null)
				&& !(criterea.getCode().longValue() == 0)) {
			if (filters.equals("")) {
				filters = " clfd.codigo=" + criterea.getCode();
			} else {
				filters = " AND clfd.codigo=" + criterea.getCode();
			}

		}
		// Filtro Prefijo de la Clase de Fondo Documental
		if ((criterea.getPrefix() != null)
				&& !(criterea.getPrefix().equals(""))) {
			if (filters.equals("")) {
				filters = filters + " clfd.prefijo='" + criterea.getPrefix()
						+ "'";
			} else {
				filters = filters + " AND clfd.prefijo='"
						+ criterea.getPrefix() + "'";
			}
		}
		// Filtro por Nombre de la Clase de Fondo Documental
		if ((criterea.getName() != null) && !(criterea.getName().equals(""))) {
			if (filters.equals("")) {
				filters = filters + " UPPER(clfd.nombre) LIKE '%"
						+ criterea.getName().toUpperCase() + "%'";
			} else {
				filters = filters + " AND UPPER(clfd.nombre) LIKE '%"
						+ criterea.getName().toUpperCase() + "%'";
			}
		}

		// Si hay filtros, entonces armar la clausula WHERE
		if (!filters.equals("")) {
			query = query + " where " + filters;
		}

		Statement stm = null;
		ResultSet rst = null;
		ArrayList<FDClassVO> fdClasses = new ArrayList<FDClassVO>();
		stm = conn.createStatement();
		rst = stm.executeQuery(query);

		while (rst.next()) {
			FDClassVO fdClass = new FDClassVO();
			fdClass.setCode(new Long(rst.getLong("codigo")));
			fdClass.setPrefix(rst.getString("prefijo"));
			fdClass.setName(rst.getString("nombre"));
			fdClasses.add(fdClass);
		}

		stm.close();
		return fdClasses;
	}

}